import { baseRequestClient, requestClient } from '#/api/request';

export namespace AuthApi {
  /** 登录接口参数 */
  export interface LoginParams {
    password?: string;
    username?: string;
  }

  /** 权限信息 */
  export interface Permission {
    id: number;
    permissionCode: string;
    permissionName: string;
    permissionType: number;
    menuId: null | number;
    url: string;
    method: string;
  }

  /** 登录接口返回值 */
  export interface LoginResult {
    /** 访问令牌 */
    accessToken: string;
    /** 访问令牌签发时间 */
    accessTokenIssuedAt: string;
    /** 访问令牌过期时间 */
    accessTokenExpiresIn: string;
    /** 令牌类型 */
    accessTokenTokenType: string;
    /** 作用域 */
    scopes: string[];
    /** 刷新令牌 */
    refreshToken: string;
    /** 刷新令牌签发时间 */
    refreshTokenIssuedAt: string;
    /** 刷新令牌过期时间 */
    refreshTokenExpiresIn: string;
    /** 按钮权限码 */
    buttonPermCodes: string[];
    /** URL权限码 */
    urlPermCodes: string[];
    /** 角色列表 */
    roles: string[];
    /** 用户名 */
    username: string;
    /** 权限详细信息（可选） */
    permissions?: Permission[];
  }

  export interface RefreshTokenResult {
    data: string;
    status: number;
  }
}

/**
 * 登录
 */
export async function loginApi(data: AuthApi.LoginParams) {
  return requestClient.post<AuthApi.LoginResult>('/auth/api/login', data);
}

/**
 * 刷新accessToken
 */
export async function refreshTokenApi() {
  return baseRequestClient.post<AuthApi.RefreshTokenResult>(
    '/auth/api/refresh',
    {
      withCredentials: true,
    },
  );
}

/**
 * 退出登录
 */
export async function logoutApi() {
  return baseRequestClient.post('/auth/api/logout', {
    withCredentials: true,
  });
}

/**
 * 获取用户权限码
 */
export async function getAccessCodesApi() {
  return requestClient.get<string[]>('/auth/api/codes');
}
